package ObjectClass

/**
 * Scala通过单例来实现Java中静态类的功能
 * Scala中的单例是通过Object关键字来实现的
 * 党一个单例对象和他的同名类一起出现时，这个单例对象被称为这个同名类的伴生对象，相应的类被称为伴生类
 * 类和他的伴生对象必须处于同一个文件中，可以相互访问私有成员
 * 没有同名类的对象，被称为孤立对象
 */
class Person(val name: String) {
  private val id = Person.newPersonId() //调用了伴生对象中的方法

  def info() {
    printf("The id of %s is %d.\n", name, id)
  }
}

object Person {
  private var lastId = 0 //一个人的身份编号

  def newPersonId() = {
    lastId += 1
    lastId
  }

  def main(args: Array[String]) {
    val person1 = new Person("Lilei")
    val person2 = new Person("Hanmei")
    person1.info()
    person2.info()
  }
}

